
void main() {
  listDemoTest();
  parameterType();
}


void printElement(element) {
  print("currEl -> $element");
}

void listDemoTest() {
  const list = [1, 2, 3, 4, 5, 6];

  /*　直接调用　*/
  list.forEach(printElement);

  /* 箭头函数 */
  list.forEach((el) => {
    /* 箭头函数中不可写结尾符号 */
    printElement(el)
  });

  list.forEach((el) => printElement(el));

  /* 立即执行函数 (方法声明)(参数) */
  ((int num, bool b, String str){
    print("num $num, b $b, str $str");
  }) (109, false, ":sada");
}

/*
* 1、函数参数
* 2、可选参数
* 3、命令参数
*
* */
void parameterType() {
  String user = userInfo("cloud9");
  String user2 = userInfo2("cloud8");
  String user3 = userInfo3("cloud7");
  String user4 = userInfo4((val) => "当前用户 cloud6, 年龄 $val");
  print("user $user");
  print("user2 $user2");
  print("user3 $user3");
  print("user4 $user4");
}

String userInfo(String userName) {
  return "当前用户 $userName";
}

/* 可选参数 [变量 = 默认值] */
String userInfo2(String userName, [int age = 10]) {
  return "当前用户 $userName, 年龄 $age";
}

/* 命名参数，形参和实参的名字必须一致 */
String userInfo3(String userName, {int age = 20}) {
  return "当前用户 $userName, 年龄 $age";
}

/* 函数参数 */
String userInfo4(var func) {
  const val = 42;
  return func(val).toString();
}

/* 作用域和闭包 */
void scopeAndClosure() {

}


